home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / TANK11.ZIP / SOURCE.ZIP / GBB13.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-01-16  |  1.4 KB  |  113 lines

  1. ; int GetBitBlock13(x0, y0, x1, y1, buf)
  2. ;    x0,y0: upper left
  3. ;    x1,y1: lower right
  4. ;    char far *buf buffer
  5. ; returns:    size of bit block in system RAM
  6.  
  7. ARGx0    EQU    word ptr [bp+4]
  8. ARGy0    EQU    word ptr [bp+6]
  9. ARGx1    EQU    word ptr [bp+8]
  10. ARGy1    EQU    word ptr [bp+10]
  11. ADDRbuf    EQU             [bp+12]
  12.  
  13. VARPixelRows    EQU    word ptr [bp-2]
  14. VARPixelRowLen    EQU    word ptr [bp-4]
  15. VARincr    EQU    320
  16.  
  17. ByteOffsetShift EQU    1        ;# Pixels/byte
  18.  
  19. _TEXT    SEGMENT    byte public 'CODE'
  20.     ASSUME    cs:_TEXT
  21.  
  22.     EXTRN    PixelAddr13:near
  23.  
  24.     PUBLIC    _GetBitBlock13
  25. _GetBitBlock13    PROC    near
  26.  
  27.     push    bp
  28.     mov    bp,sp
  29.     sub    sp,6
  30.     push    ds
  31.     push    si
  32.     push    di
  33.  
  34. ;compute dimensions
  35.  
  36.     mov    ax,ARGx1
  37.     sub    ax,ARGx0
  38.     mov    cx,0FF07h
  39.  
  40.     and    cl,al
  41.  
  42.     xor    cl,7
  43.     shl    ch,cl
  44.     mov    cl,ch
  45.     push    cx
  46.  
  47.     mov    cl,ByteOffsetShift
  48.     shr    ax,cl
  49.     inc    ax
  50.     push    ax
  51.  
  52.     mov    ax,ARGy1
  53.     sub    ax,ARGy0
  54.     inc    ax
  55.     push    ax
  56.  
  57. ;extablish addressing
  58.  
  59.     mov    ax,ARGy0
  60.     mov    bx,ARGx0
  61.     call    PixelAddr13
  62.     xor     cl,7
  63.     push    es
  64.     pop    ds
  65.     mov    si,bx
  66.  
  67.  
  68.     les    di,ADDRbuf;
  69.  
  70. ;build five byte header
  71.  
  72.     pop    ax
  73.     mov    VARPixelRows,ax
  74.     stosw
  75.     pop    ax
  76.     mov    VARPixelRowLen,ax
  77.     stosw
  78.     pop    ax
  79.     mov    ch,al
  80.     stosb
  81.  
  82. ;copy from video buffer to ram
  83. L02:    mov    bx,VARPixelRowLen
  84.     push    si
  85.  
  86. L03:    lodsw
  87.  
  88.     dec    si
  89.     rol    ax,cl
  90.     stosb    
  91.     dec    bx
  92.     jnz    L03
  93.  
  94.     and    es:[di-1],ch
  95.     pop    si
  96.     add    si,VARincr
  97.  
  98.     dec    VARPixelRows
  99.     JNZ    L02
  100.  
  101.     mov    ax,di
  102.     sub    ax,ADDRbuf
  103.  
  104.     pop    di
  105.     pop    si
  106.     pop    ds
  107.     mov    sp,bp
  108.     pop    bp
  109.     ret
  110.  
  111. _GetBitBlock13    ENDP
  112. _TEXT    ENDS
  113.     END